//
// Created by leiyan on 2017/5/24.
//
#include <iostream>
using namespace std;

// 全局变量声明
extern int a, b;
extern int c;
extern float f;

//定义常量
#define LENGTH 10
#define WIDTH  5
#define NEWLINE '\n'

int showType () {
    cout << "Size of char : " << sizeof(char) << endl;
    cout << "Size of int : " << sizeof(int) << endl;
    cout << "Size of short int : " << sizeof(short int) << endl;
    cout << "Size of long int : " << sizeof(long int) << endl;
    cout << "Size of float : " << sizeof(float) << endl;
    cout << "Size of double : " << sizeof(double) << endl;
    cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;

    //声明类型
    typedef int feet;
    feet distance;

    //声明枚举
    enum color {red, green = 5, blue} co;
    co = blue;

    // 局部变量声明
    int a, b;
    int c;
    float f;

    // 实际初始化
    a = 10;
    b = 20;
    c = a + b;

    cout << c << endl ;

    f = 70.0/3.0;
    cout << f << endl ;

    //转义符 \\	\字符    \'	'字符 http://www.runoob.com/cplusplus/cpp-constants-literals.html

    //字符串常量
    /*
     "hello, dear"

     "hello, \

     dear"

     "hello, " "d" "ear"
    这三种形式所显示的字符串是相同的
     */

    int area = LENGTH * WIDTH;
    cout << area;
    cout << NEWLINE;
    //把常量定义为大写字母形式，是一个很好的编程实践。
    
    /*
     const	const 类型的对象在程序执行期间不能被修改改变。
     volatile	修饰符 volatile 告诉编译器，变量的值可能以程序未明确指定的方式被改变。
     restrict	由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。
     */

    return 0;
};